package cn.hesion.designpattern.Singleton;

//这种形式兼顾饿汉式单例模式的内存浪费问题和synchronized的性能问题
//完美屏蔽了这两个缺点
public class LazyInnerClassSingleton {
    //使用LazyInnerClassGeneral的时候，默认会先初始化内部类
    //改进，避免被暴力反射破坏单例模式
    private LazyInnerClassSingleton() {
        if(null != LazyHolder.LAZY){
            throw  new RuntimeException("不允许有多个实例");
        }
    }

    //每一个关键字都不是多余的，static是为了使单例的空间共享，保证这个方法不会被重写，重载
    public static final  LazyInnerClassSingleton getInstance() {
        return LazyHolder.LAZY;
    }

    private static class LazyHolder {
        private static final LazyInnerClassSingleton LAZY = new LazyInnerClassSingleton();
    }
}
